package com.tocean.app.util;

import com.tocean.app.dto.FileDto;
import com.tocean.app.util.id.UUIDGenerate;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.util.Optional;

/**
 * 功能描述：文件工具类
 */
@Slf4j
@Component
public class FileUtil {

    @Value("${file.path}")
    private String filePath;

    /**
     * 功能描述：上传文件
     *
     * @param file 文件
     * @return
     */
    public Optional<FileDto> upload(MultipartFile file) {
        if (file.isEmpty()) {
            log.error("文件为空", file.getOriginalFilename());
            return null;
        }

        String originalFileName = file.getOriginalFilename(); // 源文件名(包含后缀)
        String suffixName = originalFileName.substring(originalFileName.lastIndexOf("."));  // 源文件后缀名
        String newFileName = String.format("%s%s", UUIDGenerate.getUUIDString(), suffixName);

        File destFile = new File(filePath + File.separator + newFileName);
        if (!destFile.getParentFile().exists()) {
            destFile.getParentFile().mkdirs();
        }

        /* 保存文件 */
        try {
            file.transferTo(destFile);
            return Optional.of(new FileDto().setFileName(newFileName).setPath("/file/" + newFileName));
        } catch (Exception e) {
            return null;
        }
    }

    /**
     * 功能描述：获取文件后缀
     *
     * @param fileOriginName 源文件名
     * @return
     */
    public static String getSuffix(String fileOriginName) {
        return fileOriginName.substring(fileOriginName.lastIndexOf("."));
    }

}
